#include <iostream>
#include <queue>

using namespace std;

const int N = 1e5 + 10;

int n;
int a[N], b[N];

struct node
{
    int sum; // 当前的和
    int i, j; // a 和 b 的编号

    bool operator < (const node& x) const
    {
        // 小根堆，大元素下坠
        return sum > x.sum;
    }
};

priority_queue<node> heap; // 小根堆

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];
    for(int i = 1; i <= n; i++) cin >> b[i];

    // 1. 将 a[i] + b[1] 放进堆里面
    for(int i = 1; i <= n; i++)
    {
        heap.push({a[i] + b[1], i, 1});
    }

    // 2. 依次拿出 n 的数
    for(int k = 1; k <= n; k++)
    {
        node t = heap.top(); heap.pop();
        int sum = t.sum, i = t.i, j = t.j;

        cout << sum << " ";
        if(j + 1 <= n) heap.push({a[i] + b[j + 1], i, j + 1});
    }

    return 0;
}